問題解説: サーバーが再起動する!
みなさんこんにちは. 2日目午前の問題 (サーバーが再起動する!) を作成した市川です.
本問題の背景 (CVE-2015-5600の概要)
OpenSSHでは,LinuxのPAMモジュールを利用することで認証プロセスをアプリケーションから分離して行うことができます.パスワードを用いた認証には大きく分けて2種類の方法があり,
- PasswordAuthentication
- ChallengeResponseAuthentication
です.
いずれの方法もLinuxに登録されているユーザーの認証情報を用いてログインを行いますが,PasswordAuthenticationが平文でパスワードの照合を行うのに対し,ChallengeResponseAuthenticationはチャンレンジレスポンス認証を用いるため平文パスワードがネットワークを流れることはありません.(もちろんSSLで暗号化されているため平文ではないが,復号するとパスワードがそのまま見える,という意味です.)
以上の理由からChallengeResponseAuthenticationが用いられることはそれほど珍しくなく,また鍵の設置を必要としないため緊急時のログイン手段としてはよく用いられます.
さて,ChallnegeResponseAuthenticationを行うデバイスにはbsdauth
, pam
, skey
があり,これらを指定することで認証デバイスを順に試すことができます.今回用いた脆弱性CVE-2015-5600は,このデバイスにpamをカンマ区切りで大量に指定することで,パスワード認証の本来の上限回数を超えて試行出来てしまう,というものです.
問題文
最近サーバー(10.X.10.2)が頻繁に再起動して困っている.
原因調査と問題解決をお願いしたい.
また,報告する際には
- 何が原因だったのか
- それに対しどのような対処を行ったか
を明記していただきたい.
また,サーバーに何らかの脆弱性が存在する場合は必ずその箇所を修正すること.
解説
問題が公開されてからしばらくすると,CVE-2015-5600を悪用したブルートフォース攻撃が開始されます.攻撃対象のユーザーubuntu
のパスワードは12345
に設定されており,10000から順にインクリメントしながら攻撃を行います.ログインに成功したらすぐにsudo reboot
を行い,作業妨害を行うことを繰り返します.
なお,Linuxの標準の設定ではPAMモジュールにfaildelay (ログインが失敗した際,強制的に待ち時間を入れるモジュール)が設定されており,これでは競技時間内にブルートフォース攻撃を複数回仕掛けることは困難でした.そのため/etc/pam.d/
以下のfaildelayに関する設定を全て解除,無効化し,1秒間に最大で約10回のパスワード入力が試行できるよう細工を施しました.
この問題を解決するためには,
ChallengeResponseAuthentication
を無効にする- 公開鍵認証方式に変える
/etc/pam.d
の不適切な設定を修正する
などの対策を講じることで解決できます.(以上3点が揃った解答に対しては満点を与える予定でした.)
講評
ほとんどのチームが
- 特定の端末 (攻撃サーバー)からのアクセスを制限
ubuntu
ユーザーの設定を変える (パスワード変更,sudo権限剥奪,ユーザー削除)
など,根本的な解決に至っていない解答をしていました.そのため問題文に
また,サーバーに何らかの脆弱性が存在する場合は必ずその箇所を修正すること.
の部分を強調して再度周知したものの,完全な正解に至る解答は見られませんでした.
麻生情報ビジネス専門学校チームが唯一CVE-2015-5600に言及しており,高い得点を与えましたが,PAMの設定不備を指摘したチームは1つもありませんでした.